<?
function &openDB( $nTipoBase, $cServer, $cDatabase = "", $cUsuario = "", $cPassword = "")
{
	switch( $nTipoBase ){
		case DB_SQL: // SQL Server
			require_once ( "databasesql_class.php");
			return new DataBaseSQL( $cServer, $cDatabase, $cUsuario, $cPassword );
			break;

		case DB_DBF: // DBF
			require_once ( "databasedbf_class.php");
			return new DataBaseDBF( $cServer, $cDatabase  );
			break;

		case DB_TXT:	// Txt Archivo de Texto con Columnas sepadaras por un Delimitador
			require_once ( "databasetxt_class.php");
			return new DataBaseTxt( $cServer, $cDatabase );
			break;

		case DB_ODBC:	// ODBC
			require_once ( "databaseodbc_class.php");
			return new DataBaseODBC( $cDatabase, $cUsuario, $cPassword );
			break;

		case DB_MYSQL: // MySql
			require_once ( "databasemysql_class.php");
			return new DataBaseMySQL( $cServer, $cDatabase, $cUsuario, $cPassword );
			break;

		case DB_SQLITE: // SQLite
			require_once ( "databasesqlite_class.php");
			return new DataBaseSQLite( $cServer );
			break;
		case DB_DAT:	// DAT Archivo de Texto con Columnas  de Ancho Fijo
			require_once ( "databasedat_class.php");
			return new DataBaseDAT( $cServer, $cDatabase );
			break;
		case DB_XML:	// DAT Archivo de Texto con Columnas  de Ancho Fijo
			require_once ( "databasexml_class.php");
			return new DataBaseXML( $cServer, $cDatabase );
			break;
	}
}

function armarJoinVacio( $cJoins, $cVariables)
{
	$nqArgumentos = func_num_args()-1;

	$cJoins = "";
	for ( $nContador = 0; $nContador < $nqArgumentos;  $nContador+=2  ) {
		$cJoin = func_get_arg($nContador);
		$cVariable = func_get_arg($nContador+1);

		if ( empty($cVariable) ) {
			$cJoins .= $cJoin ;
		}
	}

	return $cJoins;
}

function armarJoin( $cJoins, $cVariables)
{
	$nqArgumentos = func_num_args()-1;

	$cJoins = "";
	for ( $nContador = 0; $nContador < $nqArgumentos;  $nContador+=2  ) {
		$cJoin = func_get_arg($nContador);
		$cVariable = func_get_arg($nContador+1);

		if ( ! ($cVariable == "") ) {
			$cJoins .= $cJoin ;
		}
	}
	return $cJoins;
}

/// armarFiltro( $cCampos, $cValores )
// Arma un String Filtro con el prefijo del WHERE
function armarFiltro( $cCampos, $cValores )
{
	$nqArgumentos = func_num_args()-1;
	$cUltimoParametro = func_get_arg( $nqArgumentos ) ;

	if ( 'or' === $cUltimoParametro ) {
		$cOperadorLogico = " OR ";
		$nqArgumentos--;
	} else {
		$cOperadorLogico = " AND ";
		if ( 'and' === $cUltimoParametro )
			$nqArgumentos--;
	}

	$cWhere = "";
	for ( $nContador = 0; $nContador < $nqArgumentos;  $nContador+=2  ) {
		$cCampo = func_get_arg($nContador);
		$cOperador = "=";
		$cValor = func_get_arg($nContador+1);

		if ( $cValor == "0" || !empty($cValor) ) {
			if ( $cWhere != "" ) {
				$cWhere .= $cOperadorLogico ;
			}

			// Solo Arma el aFiltro si no es un Termino ya Armado
			if ( !empty($cCampo) ) {
				$nPosPunto = strpos($cCampo, ".") ;

				if ( substr( $cValor, 0, 2) == '::' )
					$cWhere .= "$cCampo $cOperador " . substr( $cValor, 2 ) ;
				else
					$cWhere .= "$cCampo $cOperador " . valorToDb($cValor);

			} else { // Si Viene Vacio el Campo => el Valor es un Filtro Armado
				$cWhere .= "$cValor" ;
			}
		}
	}
	return $cWhere ? " WHERE " . $cWhere : "";
}

function valorToDb ( $cValor )
{
	$cValor = trim($cValor);

	if ( $cValor === "")  {
		$cValor = "null";
	} else {
			if ( ! (strpos( $cValor, "'" )  === FALSE) ) {
				//$cValor = str_replace( "'", "\'" , $cValor);
			}

			// Quita los '.00' de un NNN.00 (por BUG del freetds )
			if ( substr($cValor, -3 ) === ".00" ) {
					$cValor = substr($cValor, 0, -3 );
			}
			$cValor = "'$cValor'";
		}
	return $cValor;
}

// Arma un String Filtro sin el prefijo del WHERE
// Si el cValor es Verdadero => Concatena Filtro
function armarSubFiltro( $cCampos, $Filtro, $cValores )
{
	$nqArgumentos = func_num_args()-1;
	$cUltimoParametro = func_get_arg( $nqArgumentos ) ;

	if ( 'or' === $cUltimoParametro ) {
		$cOperadorLogico = " OR ";
		$nqArgumentos--;
	} else {
		$cOperadorLogico = " AND ";
		if ( 'and' === $cUltimoParametro )
			$nqArgumentos--;
	}

	$cWhere = "";
	for ( $nContador = 0; $nContador < $nqArgumentos;  $nContador+=3  ) {
		$cCampo = func_get_arg($nContador);
		$cValor = func_get_arg($nContador+2);
		$cOperador = strtoupper( func_get_arg($nContador+1) );

		if ( $cValor )
		{
			if ( $cWhere != "" )
			{
				$cWhere .= $cOperadorLogico ;
			}
			$nPosPunto = strpos($cCampo, ".") ;
			if ( substr( $cValor, 0, 2) == '::' )
				$cWhere .= "$cCampo $cOperador " . substr( $cValor, 2 ) ;
			else
				$cWhere .= "$cCampo $cOperador" ;
		}
	}
	return $cWhere ? " ( " . $cWhere . " ) " : "";
}
?>
